package ru.pb.game.network.engine.client.packets.sendable;

import ru.pb.game.network.engine.client.packets.GameServerToClientPacket;
import ru.pb.game.objects.model.players.Player;
import ru.pb.game.objects.model.players.enums.Team;
import ru.pb.game.objects.model.room.Frag;
import ru.pb.game.objects.model.room.FragInfos;
import ru.pb.game.objects.model.room.Room;
import ru.pb.game.objects.model.room.Room.SLOT;

/**
 * Инфу при убийстве.
 * 
 * @author: Felixx
 * @version: 1.00
 */
public class opcode_3854_ACK extends GameServerToClientPacket
{
	private Room _room;
	private FragInfos _kills;

	public opcode_3854_ACK(Player p, FragInfos kills)
	{
		_room = p.getRoom();
		_kills = kills;
	}

	@Override
	public void writeImpl()
	{
		_log.info("======= BEGIN KILL INFO ACK =====");
		writeH(3854); // 0xF0E

		writeC(_kills.unkCount); // WTF?
		writeC(_kills.killsCount); // Всего померло.
		writeC(_kills.killer); // Слот убитого.
		writeD(_kills.weapon); // Орудие убийства.
		writeB(_kills.bytes13); // Хз что там.

		for(int i = 1; i <= _kills.killsCount; i++)
		{
			Frag frag = _kills.gerFrag(i);
			writeC(frag.unk_c_1);
			writeC(frag.unk_c_2); //
			// writeC(frag.unk_c_3);
			// writeC(frag.unk_c_4);
			writeH(); // SpecMessage
			writeB(frag.bytes13);
		}

		writeH(_room.getKills(Team.CHARACTER_TEAM_RED)); // Общий счет красная команда
		writeH(_room.getDeaths(Team.CHARACTER_TEAM_RED)); // Общий счет синяя команда

		writeH(_room.getKills(Team.CHARACTER_TEAM_BLUE)); // Общий счет красная команда
		writeH(_room.getDeaths(Team.CHARACTER_TEAM_BLUE)); // Общий счет синяя команда

		for(SLOT slot : _room.getSlots())
		{
			writeH(slot.allKills);
			writeH(slot.allDeaths);
		}

		writeC(); // кол-вол игроков?
		SLOT slot = _room.getSlot(_kills.killer);
		writeH(slot.botScore += ((5 + slot.oneTimeKills) * _room._aiLevel));
		int hz = 0;
		if(hz > 0)
			writeD();
		_log.info("======= END KILL INFO ACK =====");
	}
}